package com.agile.springboot.service.impl;

import com.agile.springboot.service.SmsService;
import com.agile.springboot.dao.SmsMapper;
import com.agile.springboot.entity.Sms;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class SmsServiceImpl implements SmsService {

    @Resource
    SmsMapper smsMapper;

    /**
     * 存储短信相关信息
     * @param sms 短信实体
     * @return 返回值为1，则说明存储短信相关信息成功
     */
    @Override
    public int saveSms(Sms sms){
        return smsMapper.insert(sms);
    }

    /**
     * 删除失效短信相关信息
     * @param id 短信id
     * @param is false代表短信已失效，true代表短信未失效
     */
    @Override
    public void deleteSms(String id, boolean is){
        if(is){
            smsMapper.deleteById(id);//验证成功后，将该短信信息进行删除
        }
        Date nowDate = new Date();
        QueryWrapper<Sms> queryWrapper = new QueryWrapper<>();
        List<Sms> smsList = smsMapper.selectList(queryWrapper.isNotNull("id"));//获取数据库中的所有数据
        for(Sms sms : smsList){
            if(nowDate.compareTo(sms.getEnd_time())==1){
                smsMapper.deleteById(sms);//如果当前时间大于当前短信信息中的验证码效力结束时间，则将该短信信息从数据库中删除
            }
        }
    }

    /**
     * 验证所输入的短信验证码是否正确
     * @param sms 短信实体
     * @return Sms实体
     */
    @Override
    public Sms verifyInformation(Sms sms){
        QueryWrapper<Sms> queryWrapper = new QueryWrapper<>();
        Map<String,Object> map = new HashMap<>();
        map.put("username",sms.getUsername());
        map.put("phone",sms.getPhone());
        map.put("verify_code",sms.getVerify_code());
        Sms result = smsMapper.selectOne(queryWrapper.allEq(map));//将满足 username、phone、verify_code 三项信息都相同的短信选择出来
        return result;
    }
}
